package fr.cpe.j2ee.projet.war;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import fr.cpe.j2ee.projet.ejb.ConversationSession;
import fr.cpe.j2ee.projet.mdb.ChatClient;
import fr.cpe.j2ee.projet.model.Conversation;
import fr.cpe.j2ee.projet.model.Message;

public class ChatBean {
	private MessageBean sentMessage; 	// Message en cours d'envoi
	private List<Message> chatMessages; // Ensemble de tous les messages de la conversation 
	private Conversation conversation;
	
	// ManagedProperty
	private LoginBean loginBean;
	
	@EJB
	private ChatClient chatClient;
	
	@EJB
	private ConversationSession conversationSession;
	
	public ChatBean() {
		sentMessage = new MessageBean();
		chatMessages = new ArrayList<Message>();
	}
	
	@PostConstruct
	private void init() {
		int conversationId = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("conId"));
		conversation = conversationSession.getById(conversationId);
		
		if(conversation == null) {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Cette conversation n'existe pas"));
			return;
		}
		
		if(!conversation.isInConversation(loginBean.getEmployee())) {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Vous ne pouvez pas participer à une conversation dont vous n'êtes pas membre"));
			conversation = null;
			return;
		}
		
		checkNewMessages();
	}
	
	/* ******************
	 * ACTIONS METHODS
	 * *****************/
	public void sendMsg() {
		if(conversation != null) {
			chatClient.sendMessage(sentMessage.getMessage(), loginBean.getEmployee().getEmpId(), conversation.getConId());
			sentMessage.setMessage(""); // remet à zéro le champ d'envoi
		} else {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Vous ne pouvez pas envoyer de message dans une conversation qui n'existe pas"));
		}
	}
	
	public void checkNewMessages() {
		if(conversation != null) {
			//System.out.println("checkNewMessages()");
			conversation = conversationSession.getById(conversation.getConId());
			chatMessages.clear();
			chatMessages.addAll(conversation.getMessages());
		}
	}
	
	/* ******************
	 * GETTERS ET SETTERS
	 * *****************/
    public void setChatMessages(List<Message> chatMessages) {
		this.chatMessages = chatMessages;
	}
    
    public List<Message> getChatMessages() {
		return chatMessages;
	}
	
	public MessageBean getSentMessage() {
		return sentMessage;
	}
	
	public void setSentMessage(MessageBean sentMessage) {
		this.sentMessage = sentMessage;
	}
	public void setLoginBean(LoginBean loginBean) {
		this.loginBean = loginBean;
	}
}
